const wechatUtil = require('@/utils/wechatUtil.js');

// 微信API服务
const wxService = {
  /**
   * 获取JSSDK配置
   * @param {Object} params - 请求参数
   * @param {String} params.url - 当前页面URL
   * @returns {Promise<Object>} 微信JSSDK配置
   */
  async getJssdkConfig(params) {
    try {
      // 验证url参数
      if (!params || !params.url) {
        return { code: 400, msg: 'URL参数不能为空' };
      }
      
      // 获取配置信息
      const config = await wechatUtil.generateConfig(params.url);
      
      return {
        code: 200,
        msg: '获取成功',
        data: config
      };
    } catch (error) {
      console.error('获取JSSDK配置失败:', error);
      return {
        code: 500,
        msg: '获取JSSDK配置失败: ' + (error.message || '服务器错误')
      };
    }
  },

  /**
   * 通过code换取网页授权access_token
   * @param {Object} params - 请求参数
   * @param {String} params.code - 微信授权回调的code
   * @returns {Promise<Object>} 包含access_token和openid的对象
   */
  async getOauth2AccessToken(params) {
    try {
      // 验证code参数
      if (!params || !params.code) {
        return { code: 400, msg: 'code参数不能为空' };
      }
      
      // 微信公众号配置
      const appId = wechatUtil.config.official.appId;
      const appSecret = wechatUtil.config.official.appSecret;
      
      // 构建请求URL
      const url = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${appSecret}&code=${params.code}&grant_type=authorization_code`;
      
      // 发起请求
      const response = await fetch(url);
      if (!response.ok) {
        throw new Error(`请求失败: ${response.status} ${response.statusText}`);
      }
      
      const result = await response.json();
      
      // 检查微信返回的数据是否包含错误信息
      if (result.errcode) {
        console.error('微信返回错误:', result);
        return {
          code: 500,
          msg: `获取access_token失败: ${result.errmsg || '未知错误'}`
        };
      }
      
      // 成功获取access_token和openid
      return {
        code: 200,
        msg: '获取成功',
        data: {
          access_token: result.access_token,
          expires_in: result.expires_in,
          refresh_token: result.refresh_token,
          openid: result.openid,
          scope: result.scope,
          unionid: result.unionid // 如果有的话
        }
      };
    } catch (error) {
      console.error('获取网页授权access_token失败:', error);
      return {
        code: 500,
        msg: '获取access_token失败: ' + (error.message || '服务器错误')
      };
    }
  },
  
  /**
   * 获取微信用户信息
   * @param {Object} params - 请求参数
   * @param {String} params.access_token - 网页授权access_token
   * @param {String} params.openid - 用户的openid
   * @returns {Promise<Object>} 用户信息
   */
  async getOauth2UserInfo(params) {
    try {
      // 验证参数
      if (!params || !params.access_token || !params.openid) {
        return { code: 400, msg: 'access_token和openid参数不能为空' };
      }
      
      // 构建请求URL
      const url = `https://api.weixin.qq.com/sns/userinfo?access_token=${params.access_token}&openid=${params.openid}&lang=zh_CN`;
      
      // 发起请求
      const response = await fetch(url);
      if (!response.ok) {
        throw new Error(`请求失败: ${response.status} ${response.statusText}`);
      }
      
      const result = await response.json();
      
      // 检查微信返回的数据是否包含错误信息
      if (result.errcode) {
        console.error('微信返回错误:', result);
        return {
          code: 500,
          msg: `获取用户信息失败: ${result.errmsg || '未知错误'}`
        };
      }
      
      // 成功获取用户信息
      return {
        code: 200,
        msg: '获取成功',
        data: {
          openid: result.openid,
          nickname: result.nickname,
          sex: result.sex,
          province: result.province,
          city: result.city,
          country: result.country,
          headimgurl: result.headimgurl,
          privilege: result.privilege,
          unionid: result.unionid // 如果有的话
        }
      };
    } catch (error) {
      console.error('获取用户信息失败:', error);
      return {
        code: 500,
        msg: '获取用户信息失败: ' + (error.message || '服务器错误')
      };
    }
  }
};

module.exports = wxService; 